package cho114366.basic;

import java.util.Scanner;

public class J09_Exception {

	public static void main(String[] args) throws Exception {
		// 예외 처리 - 일종의 오류
		// 프로그램에서 오류(error)의 종류
		// 1.complie-time error
		//		*오타등의 잘못된 코드 작성으로 원인*
		//		개발자가 충분히 수습가능
		// 2.runtime-time error
		//		*프로그램 실행시 발생하는 오류*
		// 		논리적 오류(개발자 수습가능),		
		//		잘못된 동작이나 (개발자 수습가능)
		//		특별한 상황(개발자 수습불가)이 원인-메모리 하드공간 데이터서버문제....
		
		//따라서, 예외는 프로그램 실행중 
		//발생하는 오류를 개발자가 처리하기 위해
		//코드를 작성하는 조치사항을 의미
		//이것을 통해 오류로 인한 프로그램 실행
		//중단을 막을 수 있음
		
		//예외 :checked exception
		//	  unchecked exception
		
		// 상황1) 두개의 정수를 입력받아
		// 두수를 나눈 결과를 출력하는 프로그램 작성
		// 예외처리 하지 않았을 경우
		int num1, num2, result;

		// Scanner sc=new Scanner(System.in);
		// System.out.println("두 수는?");
		// num1=sc.nextInt();
		// num2=sc.nextInt();
		// result=num1/num2;//오류(예외)java.lang.ArithmeticException
		// System.out.println("결과는"+result);
		// //num2에 0이 입력되면
		// num1을 0으로 나눌수 없으므로
		// 오류 발생하고 프로그램 중단
		// 중단시 코드 19,20줄은 출력안됨
		// Scanner sc = new Scanner(System.in);
		// System.out.println("두 수는?");
		// num1 = sc.nextInt();
		// num2 = sc.nextInt();
		// if (num1 == 0 || num2 == 0) {
		// System.out.println("0은 입력할수 없습니다.");
		// } else {
		// result = num1 / num2;
		// System.out.println("결과는" + result);
		// }
		// result = num1 / num2;// '0'으로 나누었을 경우
		// 오류(예외)java.lang.ArithmeticException
		// 오류가 발생할 조건을 if문으로 막음
		// 오류 발생 조건이 많을 경우 다중 if문을
		// 사용해야 하는데 그러면 코드가 복잡해짐
		// Scanner sc = new Scanner(System.in);
		// System.out.println("두 수는?");
		// try {
		// num1 = sc.nextInt();
		// num2 = sc.nextInt();
		// result = num1 / num2;
		// System.out.println("두 수를 나눈 결과는" + result);
		//
		// } catch (Exception ex) {
		// System.out.println("입력값은 숫자이고 0 이상입니다!");
		//
		// }
		// 자바에서는 오류발생시
		// 예외exception처리
		// 매커니즘을 사용
		// 오류가 발생할 가능성이 있는 코드를
		// try-catch 블럭으로 지정함
		// catch에서 오류에 대한 조치사항을 작성
		
		//	
	
		Scanner sc = new Scanner(System.in);
		System.out.println("두 수는?");
		try {
			num1 = sc.nextInt();
			num2 = sc.nextInt();
		}catch(Exception ex){
			throw new Exception(
					"입력이 잘못 되었습니다.");
			//입력시 발생하는 예외를
			//각각의 catch 블럭에서 처리하지 않고
			//한곳에  모아서 처리하기 위해
			//throw 라는 명령으로 예외를
			//다른곳으로 넘김
		}
		try{
			result = num1 / num2;
			System.out.println(
					"두 수를 나눈 결과는" + result);
		}catch(Exception ex){
			throw new Exception(
					"잘못된 연산을 시도하였습니다.");
		} 
			System.out.println(
					"입력값은 숫자이고 0 이상입니다!");

		
	}
}